# 用于爬取信息
import requests
# 用于解析网页
from bs4 import BeautifulSoup
# 用于正则匹配找到目标项目
import re
# 对csv文件的操作
import csv

# 打开文件
# a+权限追加写入
# newline=""用于取消自动换行
fp = open("data.csv", "a+", newline="")
# 修饰，处理成支持scv读取的文件
csv_fp = csv.writer(fp)
# 设置csv文件内标题头
head = ['日期', '最高气温', '最低气温']
# 写入标题
csv_fp.writerow(head)

# UA伪装
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
}

# 存放全部数据
data = []

# 进行url拼接，主要拼接的是年份和月份
# 从2011年到2020年
for i in range(2021, 2022):
    # 从1月到12月
    for j in range(1, 13):
        # 字符串化
        i = str(i)
        # 小于10则补0
        if j < 10:
            j = "0" + str(j)
        else:
            # 字符串化
            j = str(j)
        # 完成拼接
        url = "http://www.tianqihoubao.com/lishi/beijing/month/" + i + j + ".html"

        # 获取响应
        response = requests.get(url=url, headers=headers)
        # 设置编码为gbk
        response.encoding = 'gbk'
        # 获取响应文本数据
        page = response.text
        # 用BeautifulSoup解析网页
        soup = BeautifulSoup(page, 'lxml')
        # 获取所有tr标签
        tr_list = soup.find_all('tr')

        # 解析每一个tr标签
        for tr in tr_list:
            # 用于存放一天的数据
            one_day = []
            # 字符串化便于正则匹配
            tr = str(tr)
            # 去除所有空格
            tr = tr.replace(" ", "")
            # 取出日期
            date = re.findall(r'title="(.*?)莫斯科天气预报">', tr)
            # 如果取到则放入one——day存放
            if date:
                one_day.append(date[0])
            # 取出最高温和最低温
            tem = re.findall(r'(.*?)℃', tr)
            # 如果取到则放入one——day存放
            if tem:
                one_day.append(tem[0])
                one_day.append(tem[1])
            # 如果完整的取到一天的数据则放入data存放
            if len(one_day) == 3:
                data.append(one_day)
                print(one_day)
                # 写入csv文件
                csv_fp.writerow(one_day)

# 关闭文件指针
fp.close()

